home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / pcd2_126 / pcd2_126.lzh / PCD_GA.HAS < prev    next >
Text File  |  1997-02-06  |  6KB  |  287 lines

  1. **************************************************
  2. * TS-6BGA対応部分
  3. *
  4. * 著作権はFa.Tom氏と同じく可能な限り放棄
  5. * 改造等は、貴方の良心に従って下さい
  6. * 実行形式・ソース共、利用に制限はありませんが
  7. * 無保証であることだけは保証します
  8. *                 by まる丸 1997
  9. **************************************************
  10.  
  11.     .include    doscall.mac
  12.     .include    iocscall.mac
  13.     .include    c:\free\agiocs\agiocs.mac
  14.     .xref    X1391,X1865,X441,X949,X2271
  15.     .xref    PCD_WORK,PCD_WORK_Y,PCD_WORK_RGB,FLG_WP,V_FLAME
  16.     .xdef    YCC2FUL,GA_INIT,GA_DISP,GA_wipe,V_XY
  17.  
  18. * in d0.w=File Handle
  19. * in a1.l=dec work ptr
  20. * in a2.l=Graph work ptr 2
  21.  
  22.     .offset    0
  23. READ_BYTE    .ds.w    1    * XSIZE*3    読み込みバイト数
  24. OSET_Y1        .ds.w    1    * XSIZE*4    2ライン目のYデータオフセット
  25. XlpCOUNT    .ds.w    1    * XSIZE/2-1 or XSIZE/6-1 Xループカウンタ値
  26. YlpCOUNT    .ds.w    1    * YSIZE/2-1    Yループカウンタ値
  27. CCDEC_COUNT    .ds.w    1    * XSIZE/2-1
  28. YDAT_COUNT    .ds.w    1    * XSIZE*2-1    Yデータ展開カウンタ値
  29. LINE_OSET1    .ds.w    1    * 1ラインのバイト数
  30. LINE_OSET2    .ds.w    1    * 2ラインのバイト数
  31.  
  32. YFDEC    macro    regA,regB
  33.     move.l    (regA)+,d0
  34.     move.l    d0,d1
  35.     move.l    d0,d2
  36.     add.l    d3,d0
  37.     add.l    d4,d1
  38.     add.l    d5,d2
  39.     tst.l    d1
  40.     bpl    @f
  41.     moveq.l    #0,d1
  42.     bra    4f
  43. @@:    cmp.l    d6,d1
  44.     blt    3f
  45.     moveq.l    #$ff,d1
  46.     bra    4f
  47. 3:    lsr.l    #2,d1
  48. 4:    tst.l    d2
  49.     bpl    @f
  50.     clr.b    d1
  51.     bra    4f
  52. @@:    cmp.l    d6,d2
  53.     blt    3f
  54.     move.b    #$ff,d1
  55.     bra    4f
  56. 3:    lsl.l    #6,d2
  57.     swap    d2
  58.     move.b    d2,d1
  59. 4:    move.w    d1,(regB)+
  60.     tst.l    d0
  61.     bpl    @f
  62.     clr.w    (regB)+
  63.     bra    4f
  64. @@:    cmp.l    d6,d0
  65.     blt    3f
  66.     move.w    #$00ff,(regB)+
  67.     bra    4f
  68. 3:    lsl.l    #6,d0
  69.     swap    d0
  70.     move.w    d0,(regB)+
  71. 4:
  72.     .endm
  73.  
  74. *------------------------------
  75. * フォトYCC→フルカラー変換
  76. * フルサイズ展開,表示
  77. *------------------------------
  78.     .text
  79.     .cpu    68000
  80.     .align    4
  81. YCC2FUL:
  82.     movem.l    d1-d7/a0-a6,-(sp)
  83.     move.l    #$3fc00,d6            *$ffを10bit左へずらした数値
  84.     move.l    a1,(DEC_WK)
  85.     move.l    a1,a3
  86.     move.w    (READ_BYTE,a3),-(sp)
  87.     clr.w    -(sp)
  88.     pea    PCD_WORK
  89.     move.w    d0,-(sp)            * DOS _READのスタック設定完了
  90.     move.w    (YlpCOUNT,a3),d7        * Y方向ループカウンタ
  91. 2:    DOS    _READ                *
  92.     cmp.w    (READ_BYTE,a3),d0        * DOS _READにミスしたか?
  93.     bne    READ_ERR_BREAK            *
  94.     swap    d7
  95.     move.w    (YDAT_COUNT,a3),d7        * 2ライン分
  96.     lea.l    (PCD_WORK),a0            *
  97.     lea.l    (PCD_WORK_Y),a1
  98.     lea.l    (X1391),a2
  99. @@:    moveq.l    #0,d0
  100.     move.b    (a0)+,d0
  101.     add.w    d0,d0
  102.     add.w    d0,d0
  103.     move.l    (a2,d0.w),(a1)+
  104.     dbra    d7,@b
  105.     lea.l    (a0),a1            * (a0)=Cb
  106.     move.w    (CCDEC_COUNT,a3),d7    * CCデコードカウンタ値
  107.     add.w    d7,a1
  108.     addq.w    #1,a1            * (a1)=Cr
  109.     lea.l    (X1865),a2
  110.     lea.l    (X441),a3
  111.     lea.l    (X949),a4
  112.     lea.l    (X2271),a5
  113.     lea.l    (PCD_WORK_RGB),a6
  114. @@:    moveq.l    #0,d0
  115.     move.b    (a1)+,d0
  116.     add.w    d0,d0
  117.     add.w    d0,d0
  118.     move.l    (a2,d0.w),(a6)+
  119.     move.l    (a4,d0.w),d1
  120.     moveq.l    #0,d0
  121.     move.b    (a0)+,d0
  122.     add.w    d0,d0
  123.     add.w    d0,d0
  124.     add.l    (a3,d0.w),d1
  125.     move.l    d1,(a6)+
  126.     move.l    (a5,d0.w),(a6)+
  127.     dbra    d7,@b
  128.     move.l    (DEC_WK),a3
  129.     move.l    V_XY,d2
  130.     AGIOCS    _A_G_GETFRM
  131.     move.l    a1,a6
  132.     move.l    d0,-(sp)
  133.     move.l    a1,a4
  134.     lea.l    NextLine,a5
  135.     lea.l    (PCD_WORK_Y),a0
  136.     move.w    (OSET_Y1,a3),a1
  137.     adda.l    a0,a1
  138.     lea.l    (PCD_WORK_RGB),a2
  139.     move.w    (XlpCOUNT,a3),d7
  140. 1:    move.l    (a2)+,d3
  141.     move.l    (a2)+,d4
  142.     move.l    (a2)+,d5
  143.     YFDEC    a0,a4
  144.     YFDEC    a0,a4
  145.     YFDEC    a1,a5
  146.     YFDEC    a1,a5
  147.     dbra    d7,1b
  148.     move.l    a6,a1
  149.     move.l    (sp)+,d2
  150.     AGIOCS    _A_G_SETFRM
  151.     addq.l    #1,V_XY
  152.     move.l    V_XY,d2
  153.     AGIOCS    _A_G_GETFRM
  154.     move.l    d0,d2
  155.     move.l    a1,a5
  156.     lea.l    NextLine,a4
  157.     move.w    (XlpCOUNT,a3),d7
  158. @@:    move.w    (a4)+,(a5)+
  159.     move.w    (a4)+,(a5)+
  160.     move.w    (a4)+,(a5)+
  161.     move.w    (a4)+,(a5)+
  162.     dbra    d7,@b
  163.     AGIOCS    _A_G_SETFRM
  164.     addq.l    #1,V_XY
  165.     swap    d7
  166.     dbra    d7,2b
  167.     lea.l    (10,sp),sp
  168.     moveq.l    #0,d0
  169.     movem.l    (sp)+,d1-d7/a0-a6
  170.     rts
  171. *------------------------------
  172. * 読み込みエラー
  173. *------------------------------
  174. READ_ERR_BREAK:
  175.     lea.l    (10,sp),sp
  176.     moveq.l    #-1,d0
  177.     movem.l    (sp)+,d1-d7/a0-a6
  178.     rts
  179. *------------------------------
  180. * TS-6GBA及びAGIOCSの初期化
  181. *  リターン -1 エラー
  182. *         1 TS-6BGA表示中
  183. *         0 本体V-RAM表示中
  184. *------------------------------
  185. GA_INIT:
  186.     movem.l    d1-d4/a1,-(sp)
  187.     suba.l    a1,a1
  188.     IOCS    _B_SUPER
  189.     move.l    d0,a1
  190.     bsr    agiocs_chek        *agiocsは常駐しているか
  191.     tst.l    d0
  192.     bne    GA_ERR
  193.     move.w    #1,-(sp)        *TS-6BGAが
  194.     pea.l    $e9e3c2            *装着されているか
  195.     pea.l    $e9e3c2            *チェック
  196.     DOS    _BUS_ERR        *
  197.     lea.l    10(sp),sp        *
  198.     tst.l    d0            *
  199.     bne    GA_ERR
  200.     move.b    $e9e211,d0        *表示状態チェック
  201.     andi.b    #$40,d0            *
  202.     rol.b    #2,d0            *
  203.     exg    d0,d4
  204.     AGIOCS    _A_INIT            *AGIOCSの初期化
  205.     tst.l    d0
  206.     bne    GA_ERR
  207.     move.l    #_A_FRAME_TYPE_TS6BGA,d2
  208.     AGIOCS    _A_FRAME        *フレームハンドルの設定
  209.     tst.l    d0
  210.     bne    GA_ERR
  211.     AGIOCS    _A_P_INIT
  212.     AGIOCS    _A_G_INIT
  213.     move.l    #$03000200,d2        *画面サイズ768X512
  214.     move.l    #_A_COLFMT_TS6BGA_24B,d3 *色フォーマット
  215.     AGIOCS    _A_MODE
  216.     moveq.l    #0,d2
  217.     move.l    #03000200,d3
  218.     AGIOCS    _A_G_CLIP        *クリッピングエリア設定
  219.     moveq.l    #1,d0
  220.     bsr    GA_DISP
  221.     bra    @f
  222. GA_ERR:    move.l    #-1,d4
  223. @@:    IOCS    _B_SUPER
  224.     exg    d0,d4
  225.     movem.l    (sp)+,d1-d4/a1
  226.     rts
  227.  
  228. *------------------------------
  229. * AGIOCSの常駐チェック
  230. *------------------------------
  231. agiocs_chek:
  232.     movem.l    d1/a0-a1,-(sp)
  233.     move.w    #$100+$f9,-(sp)        * IOCS $F9
  234.     DOS    _INTVCG
  235.     addq.l    #2,sp
  236.     subq.l    #8,d0
  237.     move.l    d0,a0
  238.     lea.l    ag_tit,a1
  239.     moveq.l    #7,d1
  240.     move.l    #-1,d0
  241. @@:    cmp.b    (a0)+,(a1)+
  242.     bne    @f
  243.     dbra    d1,@b
  244.     clr.l    d0
  245. @@:    movem.l    (sp)+,d1/a0-a1
  246.     rts
  247. *------------------------------
  248. * TS-6BGAの表示切り替え
  249. *------------------------------
  250. GA_DISP:
  251.     movem.l    d1-d2,-(sp)
  252.     move.l    d0,d2
  253.     AGIOCS    _A_G_DISP
  254.     movem.l    (sp)+,d1-d2
  255.     rts
  256.  
  257. *------------------------------
  258. * 画面消去
  259. *------------------------------
  260. GA_wipe:
  261.     tst.l    V_FLAME
  262.     bmi    @f
  263.     movem.l    d0-d2/a1,-(sp)
  264.     moveq.l    #0,d2
  265.     lea.l    wi_dt,a1
  266.     AGIOCS    _A_G_WIPE
  267.     movem.l    (sp)+,d0-d2/a1
  268. @@:    rts
  269.  
  270. *------------------------------
  271. * 固定データ
  272. *------------------------------
  273.     .data
  274.     .align    4
  275. wi_dt:    .dc.l    0
  276. ag_tit:    .dc.b    '*AGIOCS*',0
  277.  
  278. *------------------------------
  279. * ワークエリア
  280. *------------------------------
  281.     .bss
  282.     .align    4
  283. DEC_WK:        .ds.l    1
  284. V_XY:        .ds.l    1
  285. NextLine:    .ds.l    768
  286.  
  287.